package com.master.bd;

import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Iterator;

import com.master.ed.Servico_PropostaED;
import com.master.util.Excecoes;
import com.master.util.FormataData;
import com.master.util.Mensagens;
import com.master.util.bd.ExecutaSQL;
import com.master.util.Utilitaria;

public class Servico_PropostaBD {

	public Servico_PropostaBD() {

	}

	private ExecutaSQL executasql;

	Utilitaria util = new Utilitaria(executasql);

	public Servico_PropostaBD(ExecutaSQL sql) {
		this.executasql = sql;
		util = new Utilitaria(this.executasql);
	}

	public Servico_PropostaED inclui(Servico_PropostaED ed) throws Excecoes {

		String sql = null;
		try {

			ed.setOid_servico_proposta(util.getAutoIncremento("oid_servico_proposta", "servicos_propostas"));

			sql = " INSERT INTO Servicos_Propostas (" + "OID_Servico_Proposta" + ", oid_tipo_movimento" + ", oid_proposta"
					+ ", vl_servico, vl_servico_minimo, tx_observacao"
					+ ") VALUES (" + ed.getOid_servico_proposta()
					+ ", " + ed.getOid_tipo_movimento() + ", "
					+ ed.getOid_proposta() + ", "
					+ ed.getVl_servico() + ", "
					+ ed.getVl_servico_minimo() + ", "
					+ util.getSQLString(ed.getTx_observacao())
					+ ")";

			executasql.executarUpdate(sql);
			return ed;
		} catch (Mensagens exc) {
			throw exc;
		} catch (Exception exc) {
			throw new Excecoes(exc.getMessage(), exc,
					this.getClass().getName(), "inclui()");
		}
	}

	public void altera(Servico_PropostaED ed) throws Excecoes {

		String sql = null;
		try {

			sql = " UPDATE Servicos_Propostas SET ";
			sql+= "oid_tipo_movimento="+ ed.getOid_tipo_movimento();
			sql+= ",vl_servico="+ed.getVl_servico();
			sql+= ",vl_servico_minimo="+ed.getVl_servico_minimo();
			sql+= ",tx_observacao="+ util.getSQLString(ed.getTx_observacao());

			sql += " WHERE oid_servico_proposta = " + ed.getOid_servico_proposta();

			executasql.executarUpdate(sql);
		} catch (Exception exc) {
			throw new Excecoes(exc.getMessage(), exc,
					this.getClass().getName(), "altera()");
		}
	}

	public void deleta(Servico_PropostaED ed) throws Excecoes {

		String sql = null;
		try {

			sql = " DELETE FROM Servicos_Propostas WHERE oid_servico_proposta = ";
			sql += ed.getOid_servico_proposta();

			executasql.executarUpdate(sql);

		} catch (Exception exc) {
			throw new Excecoes(exc.getMessage(), exc,
					this.getClass().getName(), "deleta()");
		}
	}

	public ArrayList lista(Servico_PropostaED ed) throws Excecoes {

		String sql = null;
		ArrayList list = new ArrayList();
		boolean consulta_lista = true;
		try {
			sql = " SELECT sp.*, ts.cd_tipo_movimento, ts.nm_tipo_movimento, p.nr_proposta " +
					" FROM Propostas p, Servicos_Propostas sp " +
							" left join tipos_movimentos ts on sp.oid_tipo_movimento = ts.oid_tipo_movimento "
					+ " WHERE p.oid_proposta = sp.oid_proposta ";
			if (ed.getOid_proposta() > 0) {
				sql += " and p.oid_proposta = " + ed.getOid_proposta();
			}
			if (ed.getOid_servico_proposta() > 0) {
				sql += " and sp.oid_servico_proposta = " + ed.getOid_servico_proposta();
			}

			sql += " ORDER BY p.oid_proposta, sp.oid_Servico_Proposta";

//			// (sql);

			ResultSet res = this.executasql.executarConsulta(sql);
			ResultSet res2 = null;
			String NR_Processo = "";
			while (res.next()) {
				Servico_PropostaED edVolta = new Servico_PropostaED();

				edVolta.setOid_servico_proposta(res.getLong("oid_Servico_Proposta"));
				edVolta.setOid_proposta(res.getLong("oid_Proposta"));
				edVolta.setNr_proposta(res.getLong("nr_proposta"));

				edVolta.setOid_tipo_movimento(res.getLong("oid_tipo_movimento"));
				edVolta.setCd_tipo_movimento(res.getString("cd_tipo_movimento"));
				edVolta.setNm_tipo_movimento(res.getString("nm_tipo_movimento"));

				edVolta.setVl_servico(res.getDouble("vl_servico"));
				edVolta.setVl_servico_minimo(res.getDouble("vl_servico_minimo"));
				edVolta.setTx_observacao(util.getValueDef(res.getString("tx_observacao"),""));

				list.add(edVolta);

			}
			return list;
		} catch (Exception exc) {
			throw new Excecoes(exc.getMessage(), exc,
					this.getClass().getName(), "lista()");
		}

	}

	public Servico_PropostaED getByRecord(Servico_PropostaED ed) throws Excecoes {

		try {
			Iterator it = this.lista(ed).iterator();
			if (it.hasNext())
				return (Servico_PropostaED) it.next();
			else
				return new Servico_PropostaED();
		} catch (Exception exc) {
			throw new Excecoes(exc.getMessage(), exc,
					this.getClass().getName(), "getByRecord()");
		}
	}

}
